package cn.psvmc.cxzapi.service.market;

import cn.psvmc.cxzapi.config.mybatisplus.service.impl.AbstractService;
import cn.psvmc.cxzapi.exception.ServiceException;
import cn.psvmc.cxzapi.mapper.market.TSortComponentMapper;
import cn.psvmc.cxzapi.model.common.MarketEntity;
import cn.psvmc.cxzapi.model.market.TSortComponent;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

/**
 * 分类推荐组件实例服务实现类
 * @Author auto
 * @Date 2024-08-13
 */
@Service
public class TSortComponentService extends AbstractService<TSortComponentMapper, TSortComponent> {

    @Resource
    private TSortComponentMapper tSortComponentMapper;

    /**
    * @Date auto 2024-08-13 新增分类推荐组件实例
    * @Param tSortComponent 分类推荐组件实例
    * @Return int
    */
    public int add(TSortComponent tSortComponent){
        return tSortComponentMapper.insert(tSortComponent);
    }

    /**
    * @Date auto 2024-08-13 更新分类推荐组件实例
    * @Param tSortComponent 分类推荐组件实例模型
    * @Return int
    */
    public int edit(TSortComponent tSortComponent){
        checkObjAndVersion(tSortComponent.getScid(), tSortComponent.getRversion());// 检查对象是否存在 并 比较版本号

        // 字段为null 不更新
        return tSortComponentMapper.updateById(tSortComponent);
    }

    /**
    * @Date auto 2024-08-13 删除分类推荐组件实例
    * @Param id 唯一id
    * @Param rversion 版本号
    * @Return int
    */
    public int delete(Integer id, Integer rversion){
        checkObjAndVersion(id, rversion);// 检查对象是否存在 并 比较版本号

        return tSortComponentMapper.deleteById(id);
    }

    // 检查对象是否存在 并 比较版本号
    private void checkObjAndVersion(Integer id, Integer rversion) {
        // 查询分类推荐组件实例详情
        TSortComponent tSortComponent = tSortComponentMapper.selectById(id);
        if(tSortComponent == null){
            throw new ServiceException("未查询到对应的分类推荐组件实例信息！");
        }

        // 比较数据版本号
        if(!rversion.equals(tSortComponent.getRversion())){
            throw new ServiceException("数据已更新，请刷新后重试！");
        }
    }

    /**
     * @Description 列表
     * @Date 2024/8/13 16:55
     * @Author YWX
     * @Param []
     * @Return java.util.List<java.util.Map>
     **/
    public List<Map> listAll(MarketEntity entity){
        List<Map> list = tSortComponentMapper.listAll(entity);
        return list;
    }

    /**
     * @Description 删除分组
     * @Date 2024/8/18 16:15
     * @Author YWX
     * @Param [groupName]
     * @Return void
     **/
    public void deleteGroup(String groupName, String componentId) {
        tSortComponentMapper.delete(groupName, componentId);
    }
}
